In many computing systems, low level instruction code is used as an intermediary between the hardware components of the computing system, the operating software, and other high level software executing on the computing system. This type of low level instruction code is commonly known as a computer system firmware. Examples of computer system firmware include, but are not limited to, Basic Input and Output System (“BIOS”) firmware and Unified Extensible Firmware Interface (“UEFI”)—compliant firmware. The firmware provides a set of software routines that allows high level software to interact with the hardware components of the computing system using standard calls.
It is not uncommon to need to change the firmware files. These changes can be updates to enhance the performance of the firmware, add features to the firmware, or to prevent potential security issues. In order to change the firmware in conventional systems, the entire firmware is deleted from the non-volatile random access memory (“NVRAM”) in which it is stored. The new firmware can then be written to the NVRAM.
The process of deleting and rewriting computer system firmware using conventional technologies can leave a computing system in a vulnerable state. For example, a power interruption or outage during the firmware update process can cause an error in the firmware. These errors can prevent a computer from booting, forcing a user to implement a manual procedure to perform a recovery operation on the firmware in order to allow the computer to start up.
Because of the intrinsic complexity of computer system firmware, and the need to ensure that every computer system can be updated smoothly, a significant amount of time and care is applied to test firmware updates to identify any potential issues. Thus, even though computers may require a firmware update, particularly in the case of a security update, the large amount of testing of firmware updates, in order to ensure that the updates can be applied without compromising the reliability of the platform, often delays the release of such updates.
It is with respect to these considerations and others that the various configurations described below are presented.